数字电路基础知识

您所在的位置:网站首页 编码和译码电路中,输出为二进制代码的电路是( ) 数字电路基础知识

数字电路基础知识

2024-07-04 21:57| 来源: 网络整理| 查看: 265

数字电路基础知识——组合逻辑电路 数字电路中有很多基本常用的组合逻辑电路,如编码器、译码器、数据选择器、加法器、比较器。 本次主要介绍译码器、数据选择器。加法器参考:数字电路基础知识(四) 加法器-半加器、全加器与超前进位加法器

并用Verilog语言设计简单的组合逻辑电路,如2-4译码器、BCD译码器。 使用Verilog语言设计一个简单的组合逻辑电路(2-4译码器) 设计BCD译码器,输入0~9。采用Verilog描述并画出门级电路图。(4线-10线译码器)

一、译码器

译码器:将输入的二进制码译成对应的输出高、低电平信号 比较常见的译码器有二进制译码器、二——十进制译码器、显示译码器等

二进制译码器(3线-8线译码器) 在这里插入图片描述

74HC138译码器 上面是3-8译码器的逻辑框图和真值表。3-8译码器用的最多的芯片是74HC138芯片。 在这里插入图片描述 其有三个控制端S1-3,当 S1=1,S2+S3=0 时,Gs的输出为高电平,译码器处于工作状态。

使用Verilog语言设计一个简单的组合逻辑电路(2-4译码器) 1)使用case语句状态机设计:

module decode_2_4( input [1:0] data_i, input en_i, output [3:0] data_o ); reg [3:0] decode_o always @(*) begin if (en_i == 1'b1)begin decode_o = 4'b1111; end else begin case(data_i) 2'b00: decode_o = 4'b1110; 2'b01: decode_o = 4'b1101; 2'b10: decode_o = 4'b1011; 2'b11: decode_o = 4'b0111; default: decode_o = 4'b1111; endcase end end assign data_o = decode_o; endmodule

RTL电路图: 在这里插入图片描述 2)使用assign语句设计

module decode_2_4( input [1:0] data_i, input en_i, output [3:0] decode_o ); //assign description assign decode_o[0] = ~(~data_i[0] & ~data_i[1] & ~en_i); assign decode_o[1] = ~(~data_i[0] & data_i[1] & ~en_i); assign decode_o[2] = ~(data_i[0] & ~data_i[1] & ~en_i); assign decode_o[3] = ~(data_i[0] & data_i[1] & ~en_i); endmodule

RTL电路图(左图): 在这里插入图片描述 需要注意的是,在使用Verilog语句设计组合逻辑电路时(coding style的问题),尽量选择使用assign语句来代替always语句块。尤其是对于if-else语句来说使用 assign = ? : 条件选择语句设计出来的电路会更优,因为if-else语句可能会向下一级传播不定态。 造成逻辑电路错误。

设计BCD译码器,输入0~9。采用Verilog描述并画出门级电路图。(4线-10线译码器) module Decode_4_10( input [3:0] indata, //output reg [9:0] outdata output [9:0] outdata ); /* always @(*)begin case(indata) 4'b0000: outdata = 10'b1111_1111_10; 4'b0001: outdata = 10'b1111_1111_01; 4'b0010: outdata = 10'b1111_1110_11; 4'b0011: outdata = 10'b1111_1101_11; 4'b0100: outdata = 10'b1111_1011_11; 4'b0101: outdata = 10'b1111_0111_11; 4'b0110: outdata = 10'b1110_1111_11; 4'b0111: outdata = 10'b1101_1111_11; 4'b1000: outdata = 10'b1011_1111_11; 4'b1001: outdata = 10'b0111_1111_11; default: outdata = 10'b1111_1111_11; endcase end */ //assign description assign outdata[0] = ~(~indata[3] & ~indata[2] & ~indata[1] & ~indata[0]); assign outdata[1] = ~(~indata[3] & ~indata[2] & ~indata[1] & indata[0]); assign outdata[2] = ~(~indata[3] & ~indata[2] & indata[1] & ~indata[0]); assign outdata[3] = ~(~indata[3] & ~indata[2] & indata[1] & indata[0]); assign outdata[4] = ~(~indata[3] & indata[2] & ~indata[1] & ~indata[0]); assign outdata[5] = ~(~indata[3] & indata[2] & ~indata[1] & indata[0]); assign outdata[6] = ~(~indata[3] & indata[2] & indata[1] & ~indata[0]); assign outdata[7] = ~(~indata[3] & indata[2] & indata[1] & indata[0]); assign outdata[8] = ~(indata[3] & ~indata[2] & ~indata[1] & ~indata[0]); assign outdata[9] = ~(indata[3] & ~indata[2] & ~indata[1] & indata[0]); endmodule


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3